]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
environment: Disconnect from transitions when stopped
authorSebastian Keller <skeller@gnome.org>
Sat, 11 Apr 2026 13:02:12 +0000 (15:02 +0200)
committerSebastian Keller <skeller@gnome.org>
Sat, 11 Apr 2026 13:31:21 +0000 (15:31 +0200)
Transitions don't emit a 'destroy' signal which would be used by the
SignalTracker to automatically clean up, leading to all transitions
being leaked until session shutdown.

Avoid this by manually disconnecting them when stopped.

Fixes: 240aa910d ("environment: Ignore animation events after shutdown")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4168>

js/ui/environment.js

index 2e5baa97ea04e183010370dab9a8590605efa7f2..45dafa9a7b4c747188827b291b8247c853b195e2 100644 (file)
@@ -182,8 +182,10 @@ function _easeActor(actor, params) {
     }
 
     if (transition) {
-        transition.connectObject('stopped', (t, finished) => callback(finished),
-            sessionSignalHolder);
+        transition.connectObject('stopped', (t, finished) => {
+            transition.disconnectObject(sessionSignalHolder);
+            callback(finished);
+        }, sessionSignalHolder);
     } else {
         callback(true);
     }
@@ -271,8 +273,10 @@ function _easeAnimatableProperty(animatable, propName, target, params) {
             prepare();
     }
 
-    transition.connectObject('stopped',
-        (t, finished) => callback(finished), sessionSignalHolder);
+    transition.connectObject('stopped', (t, finished) => {
+        transition.disconnectObject(sessionSignalHolder);
+        callback(finished);
+    }, sessionSignalHolder);
     return promise;
 }